<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .a {
            width: 1000px;
            height: 100px;
            background-color: #f00;
            position: absolute;
            /* left: 1000px;
            top: 500px; */

         
        }
    </style>
</head>

<body>

    <div class="a"></div>

    <script>

        var oA = document.querySelector('.a');
        move(oA, 10, 1000 , 'width');


        // 正向运动
        // function move1(ele, speed, end) {

        //     // 获取初始值
        //     var x = ele.offsetLeft;
        //     var t = setInterval(function () {
        //         x += speed;
        //         ele.style.left = x + 'px';
        //         if (x >= end) {
        //             // 路程不一定被速度整除   必须到达终点
        //             x = end;
        //             ele.style.left = x + 'px';
        //             clearInterval(t);
        //         }
        //     }, 2)
        // }



        // 反向运动
        // function move2(ele, speed, end) {

        //     // 获取初始值
        //     var x = ele.offsetLeft;
        //     var t = setInterval(function () {
        //         x -= speed;
        //         ele.style.left = x + 'px';
        //         if (x <= end) {
        //             // 路程不一定被速度整除   必须到达终点
        //             x = end;
        //             ele.style.left = x + 'px';
        //             clearInterval(t);
        //         }
        //     }, 2)
        // }



        // 运动函数


        // // 正向运动   speed  50
        // // 反向运动   speed -50
        // function move(ele, speed, end) {
        //     // 获取初始值
        //     var x = ele.offsetLeft;
        //     var t = setInterval(function () {
        //         x += speed;
        //         ele.style.left = x + 'px';
        //         // 距离终点还差一个speed 就直接到达终点且清除定时器
        //         if (Math.abs(end - x) <= Math.abs(speed)) {
        //             // 路程不一定被速度整除   必须到达终点
        //             x = end;
        //             ele.style.left = x + 'px';
        //             clearInterval(t);
        //         }
        //     }, 2)
        // }



        
        // 正向运动   speed  50
        // 反向运动   speed -50
        // 方向   direction  'left' / 'top'
        function move(ele, speed, end , direction) {
            // 获取初始值
            var x = getCss(ele , direction);
            // 终点如果小于起点，说明是反向运动  速度就是负数
            // if(end < x) {
            //     speed = -speed
            // }
            speed = end < x ? -speed : speed ;
            var t = setInterval(function () {
                x += speed;
                ele.style[direction] = x + 'px';
                // 距离终点还差一个speed 就直接到达终点且清除定时器
                if (Math.abs(end - x) <= Math.abs(speed)) {
                    // 路程不一定被速度整除   必须到达终点
                    x = end;
                    ele.style[direction] = x + 'px';
                    clearInterval(t);
                }
            }, 2)
        }



        function getCss(ele , prop) {
            if(window.getComputedStyle) {
                return parseInt(getComputedStyle(ele)[prop])
            }
            return parseInt(ele.currentStyle[prop])
        }

    </script>

</body>

</html>